package com.shujia.day10;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Demo04Map {
    public static void main(String[] args) {
        /*
           TODO Map方法：
                1.containsValue
                2.isEmpty
                3.size
                4.get => 根据Key获取Value数据
                5.keySet => 获取所有Key
                6. 遍历
                    1.keySet
                    2.values
                    3.entrySet
         */
        HashMap<Integer, String> integerStringHashMap = new HashMap<>();
        integerStringHashMap.put(1,"1");
        integerStringHashMap.put(2,"2");
        integerStringHashMap.put(3,"3");

        System.out.println(integerStringHashMap.containsValue("3"));

        HashMap<Integer, Stu> stuHashMap = new HashMap<>();
        stuHashMap.put(1,new Stu("张三",120,130,140));
        stuHashMap.put(2,new Stu("赵六",120.1,130.1,140.1));
        stuHashMap.put(3,new Stu("王五",60,70,80));

        System.out.println(stuHashMap.containsValue(new Stu("王五", 60, 70, 80))); // false => true
        // TODO 当对Value的对象进行判断时，是需要将所有的Value值进行遍历，并通过 equals方法判断其是否相等
        //        默认调用Object中的equals => 对Stu进行重写方法

        System.out.println(stuHashMap.isEmpty()); // false
        System.out.println(stuHashMap.size()); // 3

        //
        Stu stu = stuHashMap.get(2);
        System.out.println(stu);
        System.out.println(stu.getTotalScore());

        // 获取当前Key所有的数据形成Set
        Set<Integer> integers = stuHashMap.keySet();
        System.out.println(integers);
//        for (Integer integer : integers) {
//            System.out.println(integer);
//        }

        /*
            TODO 遍历当前HashMap中的所有KeyValue数据
                key:1	value:Stu{name='张三', yw=120.0, sx=130.0, yy=140.0}
         */
        for (Integer key : stuHashMap.keySet()) {
            Stu value = stuHashMap.get(key);
            System.out.println("key:"+key+"\t"+"value:"+value);
        }

        for (Stu value : stuHashMap.values()) {
            System.out.println(value);
        }

        /*
            TODO Entry
                 Entry 表示Map中的一个元素的抽象，是一个接口  Key Value 数据
                 对于HashMap实现了Map接口，并且在内部定义了一个 Node 静态内部类 实现了 Entry 接口 表示一个元素的具体实现类
                    static class Node<K,V> implements Map.Entry<K,V> {
         */
        Set<Map.Entry<Integer, Stu>> entries = stuHashMap.entrySet();
        for (Map.Entry<Integer, Stu> entry : entries) {
            Integer key = entry.getKey();
            Stu value = entry.getValue();
            System.out.println("key:"+key+"\t"+"value:"+value);
        }

    }
}
